Dan Abramov 接受油管 UP 主的面试挑战,结果差点没写出来居中……?
The following article is from 前端从进阶到入院 Author ssh前端
前两天大名鼎鼎的 React 核心开发者 Dan Abramov 接受了油管 up 主 Ben Awad 的一场面试,而且是正儿八经做题的那种,不是之前国内那场戏称的面试。我们赶快一起来看看。
刚开场,Dan 首先来了段自我介绍:
这绕口令呢?I work on React i did not create react but i work on it on React team...
大意就是,他是 React 和 Redux 的联合开发者,他不是 React 创始人(估计是他对外发声太多,有误解的小白不少),今天他想通过 Ben 的面试,祝他好运!
接下来寒暄几句,Ben 就正式开启了面试环节:
let vs const
Dan 回答说他认为这不重要,于是面试官让他滚回家等通知了(误
开个玩笑,Dan 还是稳稳的回答出了区别,const 可以防止变量重新分配,并且指出 const 创建的对象 object 依然可以用 object.xxx 来修改对象属性的值。
之后主持人问他平时的使用习惯,Dan 说他是个很混乱的人,看心情使用,然后询问主持人是不是要解雇他(哈哈哈)
Redux
主持人非常俏皮的问:“有一个可爱的库,经常和 React 一起使用,你可能知道叫 Redux”
Dan 也很俏皮的回了句:“听说过”。
接下来主持人发出了灵魂拷问:“什么时候我该考虑在项目中使用 Redux?”
Dan 略加思索,从以下几点来回答了这个问题:
项目中已经使用了它。 团队对它比较熟悉。 服务端数据 -> 可能需要被缓存。 跨组件共享某些数据。
最后 Dan 说,如果现在新建一个项目,他可能不会选择 Redux 了,主持人蛤蛤大笑,问他会选择什么,Dan 说这取决于实际情况,如果是一些需要缓存的服务端数据,他可能会选择 react-query, relay, apollo 等一些现代的 react 请求状态库。
主持人接着追问,如果是需要提升到顶部的状态,你喜欢用 Context 吗?Dan 给出了肯定的答复。
dangerouslySetInnerHTML
dangerouslySetInnerHTML
这个 API 的使用时机提出了疑问。Dan 回答说,这个 API 是在你可能从数据库或者什么地方拿到一串 HTML 想要展示到页面上时,在确保它是安全的 HTML 文本的前提下,可以使用。你可以提前对这串 HTML 消毒(santize),确保没有未经过消毒的用户输入。
居中
一个很常规的 CSS 问题,让这段文本在页面上水平垂直居中。
Dan 慌慌张张的开始用 display: flex
起手,然后来了个 width: 100%
想让容器撑满,他显然已经忘了这是默认的块布局的行为了 XD。
Dan 写到这一步,开始迷茫了,为什么没生效!
经过了大约整整 5 分钟的苦思冥想的调试,Dan 终于试出来了问题,因为 HTML 元素默认不是 100% 的高度,大师原来也会遗忘这些基础,哈哈。
国际友人埃文尤也对此事发表了亲切的慰问。
算法:反转二叉树
主持人:Dan 我要给你出个经典的算法题,你在 Facebook 工作,现在我要看看你能不能在 Google 工作。
没错,接下来他祭出了 homebrew 作者闻风丧胆的反转二叉树 !
如图所示,把二叉树的节点左右反转。
Dan 很快给出了答案,看来常年维护 React,对树方面的操作必须是手到擒来了,主持人打趣说 Dan 破了他保持的最快反转二叉树的记录。
奖金问题:找兔子
主持人神秘的拿出了他的额外奖金问题,找兔子。
这个问题大意是,一条直线上有 100 个洞,兔子藏在其中的一个洞里。
你一次只能查看一个洞,并且每次你查看洞的时候,兔子都会跳到它当前所在位置的相邻的洞里去。
举例来说,现在有 _ X _ _ 这四个洞,X 代表兔子的位置在第二个洞,如果你查看了第三个洞,那么兔子就可能会跳到它左边的第一个或右边第三个洞中去。
要求写出找到兔子的算法,并且给出复杂度。
这是一个比较开放性的问题,具体 Dan 调试和解答的过程可以直接去油管看原视频,占据了整整二十多分钟时间。这题是真的有难度了,不过 Dan 会把他思考的过程转化成代码或者文字写在 IDE 里,帮助自己找到更多线索,并且不断的和面试官进行沟通来确认细节,我觉得这是非常值得学习的。
最后,主持人说他决定雇佣 Dan 了,当他在回答 let vs const、redux、dangerouslySetInnerHTML 的问题时,展现出的思考过程就已经足够打动他了。
主持人说,谷歌也会雇佣 Dan,因为他解决了反转二叉树问题(笑),而且在遇到困难的兔子问题时,他能够一步步的写下自己的思考,和面试官不断进行互动获得更多提示,这是非常关键的。
这也可以给我们自己一些启发。当你在面试中遇到难题的时候,不要闷着头一声不吭的写,最好把你的思考过程转化成文字写下来,多和面试官进行一些提问和细节的确认。不然面试官也不知道你在想什么,该如何提示你。
从我个人的感觉来说,没有面试官会喜欢沉默寡言的面试者,毕竟面试招进来的人是要在日后的工作中紧密合作的,确定你的思考过程很清晰,确定你在沟通交流方面友好和耐心也是面试官考察的重要因素,大家共勉。
- EOF - 推荐阅读 点击标题可跳转 觉得本文对你有帮助?请分享给更多人
推荐关注「前端大全」,提升前端技能
点赞和在看就是最大的支持❤️